package com.briup.day11;

/**
 * 包装类型的应用
 */
public class Test06 {
    public static void main(String[] args) {
        Integer i = 100;
        Integer j = 100;
        // 凡是通过new方式创建对象，都会重新在堆内存中开辟一个空间
        Integer k = new Integer(100);
        // == 在比较引用数据类型的变量时，比较的是两个引用对象的地址值
        // 如果两个对象地址值相同，那么==比较的结果就是true
        System.out.println(i == j);
        // 自动装箱创建的对象和直接new方式创建的对象，哪怕值相同，其地址值也不相同
        System.out.println(j == k);
        // 如果非要比较两个引用数据类型对象，建议使用从Object类中继承的equals方法
        System.out.println(j.equals(k));

        // 因为这里存在自动装箱，所以能够直接将基本数据类型的值赋值给Object类的引用
        test2(1);
        test2(3.1415926);
        test2("abc");
    }

    private static void test2(Object o) {

    }

    private static void test() {
        // 如果要将一个整型数据自动装箱为一个Long类型的对象，
        // 那么需要在该数值后面加上L，将其表示为long类型的数值
        Long a = 10L;
        Float f = 3.14F;
        // 这里基本数据类型的值10能够赋值给Object类型的引用d，
        // 原因在于，10能够自动装箱为Integer类型的对象，
        // 然后Object类型是Integer类型的父类，所以能够接收
        Object d = 10;

        // 从jdk9后，不建议使用构造器创建包装类型的对象，并且将构造器标记为过时同时被删除
        Integer i = new Integer(100);
        System.out.println(i);
        // 在这里引用i对应的对象自动拆箱，拿到了其内部存储的100，与1000进行相加运算
        System.out.println(1000 + i);
    }
}
